記錄學習內容。
主要是看網路上的文章和影片,做些紀錄。
內容可能有錯誤。
教學來源:
Youtube-tutorial/ComponentsDemo/ComponentsDemo/
參考:
queryItems
Query string in GET API swift Hindi tutorial
1個Http Get 可以分成很多檔案管理 ,作者把檔案分成:
一
Utility -- > 實際跑http request的程式 。
就是URLSession.shared.dataTask .resume()
二
Common 裡面放 網址:
http://
三
Model 裡面放物件類別:
像是 request的參數 、 response的參數
四
ResourceAccessor放
整個http的總程式 :
步驟1:把全部http的字串組再一起 ,
步驟2:跑URLSession.shared.dataTask .resume()
2
http組再一起的時候,原本都是自己用字串在串。
http://0.0.0.0/test?color=red&item=apple
現在改成這個方法,先創建一個struct
Struct something: Encodable
{
let color, item:String?
}
然後 創建物件
Something("red","apple")
然後
Something("red","apple") 轉成 [URLQueryItem] 類型
(這邊比較難,先跳過,作者的範例程式很完整,改一下model和網址,就直接拿來用了)
然後
URLComponts (url: URL(http://0.0.0.0/test) , resolvingAgainsBaseURL: true)
.queuyItems = [URLQueryItem]
最後URLComponts.url 就會是url了
3
URLComponts 會自動 把 中文換掉 變成
%E8%89%BE%E4%BD
之類的 。
但是如果本來就想保留特殊符號,像是 = 會變成 %3D
我要的是 = 而不是 %3D 。
找到方法:
URL decode in iOS
String.removingPercentEncoding
是String類型,不是url類型 。
所以String.removingPercentEncoding後 。
在換到URL (string: “String”)
就可以是原本的 = 了。
原本以為這樣有關係,其實沒什麼關係,不管是 = 還是%3D 都可以在瀏覽器GET網址。
但是用中文可能程式會出錯。
4
想來看http response 回傳的body ,但是只看到Optional(70 bytes)。
來找方法:
回傳有三個參數
(data,header,error)
第一個參數 只看到 70bytes
第二個參數: 看到response header
第三個參數 : 錯誤訊息
找到這個方法:
Any way to get the response body during HTTP errors?
let json = String(data: data, encoding: String.Encoding.utf8)
data 的 資料型態 是 Optional
所以把 Optional 轉成 自己設定的Struct
(自己設定的Struct像是自己訂了一個person,裡面有人名、電話、地址) ,
Person : Decodable
用decoder.decode 轉成自己設定的Struct Person 。
所以
decode -- >解碼
encode -- > 編碼
Codable -- > 都可以
Decode 應該就是 把某個資料型態 轉成自訂的資料型態 ,所以叫解碼 。
encode -- > 倒過來 ? (不清楚,先這樣猜)
Codable -- > 都可以
Data 資料型態:
https://developer.apple.com/documentation/foundation/data
A byte buffer in memory.
記憶體存的byte。
Codable
A type that can convert itself into and out of an external representation.
https://developer.apple.com/documentation/swift/codable
Decodable
https://developer.apple.com/documentation/swift/decodable
A type that can decode itself from an external representation.
Encodable
A type that can encode itself to an external representation.
https://developer.apple.com/documentation/swift/encodable